﻿using System;
using System.Collections.Generic;

namespace appbox.Host
{
    internal static class FileContentType
    {
        private static IDictionary<string, string> _mappings = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase) {
        #region Big freaking list of mime types
         // combination of values from Windows 7 Registry and
         // from C:\Windows\System32\inetsrv\config\applicationHost.config
         // some added, including .7z and .dat
         {".323", "text/h323"},
         {".3g2", "video/3gpp2"},
         {".3gp", "video/3gpp"},
         {".3gp2", "video/3gpp2"},
         {".3gpp", "video/3gpp"},
         {".7z", "application/x-7z-compressed"},
         {".aa", "audio/audible"},
         {".AAC", "audio/aac"},
         {".aaf", "application/octet-stream"},
         {".aax", "audio/vnd.audible.aax"},
         {".ac3", "audio/ac3"},
         {".aca", "application/octet-stream"},
         {".accda", "application/msaccess.addin"},
         {".accdb", "application/msaccess"},
         {".accdc", "application/msaccess.cab"},
         {".accde", "application/msaccess"},
         {".accdr", "application/msaccess.runtime"},
         {".accdt", "application/msaccess"},
         {".accdw", "application/msaccess.webapplication"},
         {".accft", "application/msaccess.ftemplate"},
         {".acx", "application/internet-property-stream"},
         {".AddIn", "text/xml"},
         {".ade", "application/msaccess"},
         {".adobebridge", "application/x-bridge-url"},
         {".adp", "application/msaccess"},
         {".ADT", "audio/vnd.dlna.adts"},
         {".ADTS", "audio/aac"},
         {".afm", "application/octet-stream"},
         {".ai", "application/postscript"},
         {".aif", "audio/x-aiff"},
         {".aifc", "audio/aiff"},
         {".aiff", "audio/aiff"},
         {".air", "application/vnd.adobe.air-application-installer-package+zip"},
         {".amc", "application/x-mpeg"},
         {".application", "application/x-ms-application"},
         {".art", "image/x-jg"},
         {".asa", "application/xml"},
         {".asax", "application/xml"},
         {".ascx", "application/xml"},
         {".asd", "application/octet-stream"},
         {".asf", "video/x-ms-asf"},
         {".ashx", "application/xml"},
         {".asi", "application/octet-stream"},
         {".asm", "text/plain"},
         {".asmx", "application/xml"},
         {".aspx", "application/xml"},
         {".asr", "video/x-ms-asf"},
         {".asx", "video/x-ms-asf"},
         {".atom", "application/atom+xml"},
         {".au", "audio/basic"},
         {".avi", "video/x-msvideo"},
         {".axs", "application/olescript"},
         {".bas", "text/plain"},
         {".bcpio", "application/x-bcpio"},
         {".bin", "application/octet-stream"},
         {".bmp", "image/bmp"},
         {".c", "text/plain"},
         {".cab", "application/octet-stream"},
         {".caf", "audio/x-caf"},
         {".calx", "application/vnd.ms-office.calx"},
         {".cat", "application/vnd.ms-pki.seccat"},
         {".cc", "text/plain"},
         {".cd", "text/plain"},
         {".cdda", "audio/aiff"},
         {".cdf", "application/x-cdf"},
         {".cer", "application/x-x509-ca-cert"},
         {".chm", "application/octet-stream"},
         {".class", "application/x-java-applet"},
         {".clp", "application/x-msclip"},
         {".cmx", "image/x-cmx"},
         {".cnf", "text/plain"},
         {".cod", "image/cis-cod"},
         {".config", "application/xml"},
         {".contact", "text/x-ms-contact"},
         {".coverage", "application/xml"},
         {".cpio", "application/x-cpio"},
         {".cpp", "text/plain"},
         {".crd", "application/x-mscardfile"},
         {".crl", "application/pkix-crl"},
         {".crt", "application/x-x509-ca-cert"},
         {".cs", "text/plain"},
         {".csdproj", "text/plain"},
         {".csh", "application/x-csh"},
         {".csproj", "text/plain"},
         {".css", "text/css"},
         {".csv", "text/csv"},
         {".cur", "application/octet-stream"},
         {".cxx", "text/plain"},
         {".dat", "application/octet-stream"},
         {".datasource", "application/xml"},
         {".dbproj", "text/plain"},
         {".dcr", "application/x-director"},
         {".def", "text/plain"},
         {".deploy", "application/octet-stream"},
         {".der", "application/x-x509-ca-cert"},
         {".dgml", "application/xml"},
         {".dib", "image/bmp"},
         {".dif", "video/x-dv"},
         {".dir", "application/x-director"},
         {".disco", "text/xml"},
         {".dll", "application/x-msdownload"},
         {".dll.config", "text/xml"},
         {".dlm", "text/dlm"},
         {".doc", "application/msword"},
         {".docm", "application/vnd.ms-word.document.macroEnabled.12"},
         {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
         {".dot", "application/msword"},
         {".dotm", "application/vnd.ms-word.template.macroEnabled.12"},
         {".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"},
         {".dsp", "application/octet-stream"},
         {".dsw", "text/plain"},
         {".dtd", "text/xml"},
         {".dtsConfig", "text/xml"},
         {".dv", "video/x-dv"},
         {".dvi", "application/x-dvi"},
         {".dwf", "drawing/x-dwf"},
         {".dwp", "application/octet-stream"},
         {".dxr", "application/x-director"},
         {".eml", "message/rfc822"},
         {".emz", "application/octet-stream"},
         {".eot", "application/octet-stream"},
         {".eps", "application/postscript"},
         {".etl", "application/etl"},
         {".etx", "text/x-setext"},
         {".evy", "application/envoy"},
         {".exe", "application/octet-stream"},
         {".exe.config", "text/xml"},
         {".fdf", "application/vnd.fdf"},
         {".fif", "application/fractals"},
         {".filters", "Application/xml"},
         {".fla", "application/octet-stream"},
         {".flr", "x-world/x-vrml"},
         {".flv", "video/x-flv"},
         {".fsscript", "application/fsharp-script"},
         {".fsx", "application/fsharp-script"},
         {".generictest", "application/xml"},
         {".gif", "image/gif"},
         {".group", "text/x-ms-group"},
         {".gsm", "audio/x-gsm"},
         {".gtar", "application/x-gtar"},
         {".gz", "application/x-gzip"},
         {".h", "text/plain"},
         {".hdf", "application/x-hdf"},
         {".hdml", "text/x-hdml"},
         {".hhc", "application/x-oleobject"},
         {".hhk", "application/octet-stream"},
         {".hhp", "application/octet-stream"},
         {".hlp", "application/winhlp"},
         {".hpp", "text/plain"},
         {".hqx", "application/mac-binhex40"},
         {".hta", "application/hta"},
         {".htc", "text/x-component"},
         {".htm", "text/html"},
         {".html", "text/html"},
         {".htt", "text/webviewhtml"},
         {".hxa", "application/xml"},
         {".hxc", "application/xml"},
         {".hxd", "application/octet-stream"},
         {".hxe", "application/xml"},
         {".hxf", "application/xml"},
         {".hxh", "application/octet-stream"},
         {".hxi", "application/octet-stream"},
         {".hxk", "application/xml"},
         {".hxq", "application/octet-stream"},
         {".hxr", "application/octet-stream"},
         {".hxs", "application/octet-stream"},
         {".hxt", "text/html"},
         {".hxv", "application/xml"},
         {".hxw", "application/octet-stream"},
         {".hxx", "text/plain"},
         {".i", "text/plain"},
         {".ico", "image/x-icon"},
         {".ics", "application/octet-stream"},
         {".idl", "text/plain"},
         {".ief", "image/ief"},
         {".iii", "application/x-iphone"},
         {".inc", "text/plain"},
         {".inf", "application/octet-stream"},
         {".inl", "text/plain"},
         {".ins", "application/x-internet-signup"},
         {".ipa", "application/x-itunes-ipa"},
         {".ipg", "application/x-itunes-ipg"},
         {".ipproj", "text/plain"},
         {".ipsw", "application/x-itunes-ipsw"},
         {".iqy", "text/x-ms-iqy"},
         {".isp", "application/x-internet-signup"},
         {".ite", "application/x-itunes-ite"},
         {".itlp", "application/x-itunes-itlp"},
         {".itms", "application/x-itunes-itms"},
         {".itpc", "application/x-itunes-itpc"},
         {".IVF", "video/x-ivf"},
         {".jar", "application/java-archive"},
         {".java", "application/octet-stream"},
         {".jck", "application/liquidmotion"},
         {".jcz", "application/liquidmotion"},
         {".jfif", "image/pjpeg"},
         {".jnlp", "application/x-java-jnlp-file"},
         {".jpb", "application/octet-stream"},
         {".jpe", "image/jpeg"},
         {".jpeg", "image/jpeg"},
         {".jpg", "image/jpeg"},
         {".js", "application/x-javascript"},
         {".jsx", "text/jscript"},
         {".jsxbin", "text/plain"},
         {".latex", "application/x-latex"},
         {".library-ms", "application/windows-library+xml"},
         {".lit", "application/x-ms-reader"},
         {".loadtest", "application/xml"},
         {".lpk", "application/octet-stream"},
         {".lsf", "video/x-la-asf"},
         {".lst", "text/plain"},
         {".lsx", "video/x-la-asf"},
         {".lzh", "application/octet-stream"},
         {".m13", "application/x-msmediaview"},
         {".m14", "application/x-msmediaview"},
         {".m1v", "video/mpeg"},
         {".m2t", "video/vnd.dlna.mpeg-tts"},
         {".m2ts", "video/vnd.dlna.mpeg-tts"},
         {".m2v", "video/mpeg"},
         {".m3u", "audio/x-mpegurl"},
         {".m3u8", "audio/x-mpegurl"},
         {".m4a", "audio/m4a"},
         {".m4b", "audio/m4b"},
         {".m4p", "audio/m4p"},
         {".m4r", "audio/x-m4r"},
         {".m4v", "video/x-m4v"},
         {".mac", "image/x-macpaint"},
         {".mak", "text/plain"},
         {".man", "application/x-troff-man"},
         {".manifest", "application/x-ms-manifest"},
         {".map", "text/plain"},
         {".master", "application/xml"},
         {".mda", "application/msaccess"},
         {".mdb", "application/x-msaccess"},
         {".mde", "application/msaccess"},
         {".mdp", "application/octet-stream"},
         {".me", "application/x-troff-me"},
         {".mfp", "application/x-shockwave-flash"},
         {".mht", "message/rfc822"},
         {".mhtml", "message/rfc822"},
         {".mid", "audio/mid"},
         {".midi", "audio/mid"},
         {".mix", "application/octet-stream"},
         {".mk", "text/plain"},
         {".mmf", "application/x-smaf"},
         {".mno", "text/xml"},
         {".mny", "application/x-msmoney"},
         {".mod", "video/mpeg"},
         {".mov", "video/quicktime"},
         {".movie", "video/x-sgi-movie"},
         {".mp2", "video/mpeg"},
         {".mp2v", "video/mpeg"},
         {".mp3", "audio/mpeg"},
         {".mp4", "video/mp4"},
         {".mp4v", "video/mp4"},
         {".mpa", "video/mpeg"},
         {".mpe", "video/mpeg"},
         {".mpeg", "video/mpeg"},
         {".mpf", "application/vnd.ms-mediapackage"},
         {".mpg", "video/mpeg"},
         {".mpp", "application/vnd.ms-project"},
         {".mpv2", "video/mpeg"},
         {".mqv", "video/quicktime"},
         {".ms", "application/x-troff-ms"},
         {".msi", "application/octet-stream"},
         {".mso", "application/octet-stream"},
         {".mts", "video/vnd.dlna.mpeg-tts"},
         {".mtx", "application/xml"},
         {".mvb", "application/x-msmediaview"},
         {".mvc", "application/x-miva-compiled"},
         {".mxp", "application/x-mmxp"},
         {".nc", "application/x-netcdf"},
         {".nsc", "video/x-ms-asf"},
         {".nws", "message/rfc822"},
         {".ocx", "application/octet-stream"},
         {".oda", "application/oda"},
         {".odc", "text/x-ms-odc"},
         {".odh", "text/plain"},
         {".odl", "text/plain"},
         {".odp", "application/vnd.oasis.opendocument.presentation"},
         {".ods", "application/oleobject"},
         {".odt", "application/vnd.oasis.opendocument.text"},
         {".one", "application/onenote"},
         {".onea", "application/onenote"},
         {".onepkg", "application/onenote"},
         {".onetmp", "application/onenote"},
         {".onetoc", "application/onenote"},
         {".onetoc2", "application/onenote"},
         {".orderedtest", "application/xml"},
         {".osdx", "application/opensearchdescription+xml"},
         {".p10", "application/pkcs10"},
         {".p12", "application/x-pkcs12"},
         {".p7b", "application/x-pkcs7-certificates"},
         {".p7c", "application/pkcs7-mime"},
         {".p7m", "application/pkcs7-mime"},
         {".p7r", "application/x-pkcs7-certreqresp"},
         {".p7s", "application/pkcs7-signature"},
         {".pbm", "image/x-portable-bitmap"},
         {".pcast", "application/x-podcast"},
         {".pct", "image/pict"},
         {".pcx", "application/octet-stream"},
         {".pcz", "application/octet-stream"},
         {".pdf", "application/pdf"},
         {".pfb", "application/octet-stream"},
         {".pfm", "application/octet-stream"},
         {".pfx", "application/x-pkcs12"},
         {".pgm", "image/x-portable-graymap"},
         {".pic", "image/pict"},
         {".pict", "image/pict"},
         {".pkgdef", "text/plain"},
         {".pkgundef", "text/plain"},
         {".pko", "application/vnd.ms-pki.pko"},
         {".pls", "audio/scpls"},
         {".pma", "application/x-perfmon"},
         {".pmc", "application/x-perfmon"},
         {".pml", "application/x-perfmon"},
         {".pmr", "application/x-perfmon"},
         {".pmw", "application/x-perfmon"},
         {".png", "image/png"},
         {".pnm", "image/x-portable-anymap"},
         {".pnt", "image/x-macpaint"},
         {".pntg", "image/x-macpaint"},
         {".pnz", "image/png"},
         {".pot", "application/vnd.ms-powerpoint"},
         {".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"},
         {".potx", "application/vnd.openxmlformats-officedocument.presentationml.template"},
         {".ppa", "application/vnd.ms-powerpoint"},
         {".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"},
         {".ppm", "image/x-portable-pixmap"},
         {".pps", "application/vnd.ms-powerpoint"},
         {".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"},
         {".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"},
         {".ppt", "application/vnd.ms-powerpoint"},
         {".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"},
         {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
         {".prf", "application/pics-rules"},
         {".prm", "application/octet-stream"},
         {".prx", "application/octet-stream"},
         {".ps", "application/postscript"},
         {".psc1", "application/PowerShell"},
         {".psd", "application/octet-stream"},
         {".psess", "application/xml"},
         {".psm", "application/octet-stream"},
         {".psp", "application/octet-stream"},
         {".pub", "application/x-mspublisher"},
         {".pwz", "application/vnd.ms-powerpoint"},
         {".qht", "text/x-html-insertion"},
         {".qhtm", "text/x-html-insertion"},
         {".qt", "video/quicktime"},
         {".qti", "image/x-quicktime"},
         {".qtif", "image/x-quicktime"},
         {".qtl", "application/x-quicktimeplayer"},
         {".qxd", "application/octet-stream"},
         {".ra", "audio/x-pn-realaudio"},
         {".ram", "audio/x-pn-realaudio"},
         {".rar", "application/octet-stream"},
         {".ras", "image/x-cmu-raster"},
         {".rat", "application/rat-file"},
         {".rc", "text/plain"},
         {".rc2", "text/plain"},
         {".rct", "text/plain"},
         {".rdlc", "application/xml"},
         {".resx", "application/xml"},
         {".rf", "image/vnd.rn-realflash"},
         {".rgb", "image/x-rgb"},
         {".rgs", "text/plain"},
         {".rm", "application/vnd.rn-realmedia"},
         {".rmi", "audio/mid"},
         {".rmp", "application/vnd.rn-rn_music_package"},
         {".roff", "application/x-troff"},
         {".rpm", "audio/x-pn-realaudio-plugin"},
         {".rqy", "text/x-ms-rqy"},
         {".rtf", "application/rtf"},
         {".rtx", "text/richtext"},
         {".ruleset", "application/xml"},
         {".s", "text/plain"},
         {".safariextz", "application/x-safari-safariextz"},
         {".scd", "application/x-msschedule"},
         {".sct", "text/scriptlet"},
         {".sd2", "audio/x-sd2"},
         {".sdp", "application/sdp"},
         {".sea", "application/octet-stream"},
         {".searchConnector-ms", "application/windows-search-connector+xml"},
         {".setpay", "application/set-payment-initiation"},
         {".setreg", "application/set-registration-initiation"},
         {".settings", "application/xml"},
         {".sgimb", "application/x-sgimb"},
         {".sgml", "text/sgml"},
         {".sh", "application/x-sh"},
         {".shar", "application/x-shar"},
         {".shtml", "text/html"},
         {".sit", "application/x-stuffit"},
         {".sitemap", "application/xml"},
         {".skin", "application/xml"},
         {".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12"},
         {".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"},
         {".slk", "application/vnd.ms-excel"},
         {".sln", "text/plain"},
         {".slupkg-ms", "application/x-ms-license"},
         {".smd", "audio/x-smd"},
         {".smi", "application/octet-stream"},
         {".smx", "audio/x-smd"},
         {".smz", "audio/x-smd"},
         {".snd", "audio/basic"},
         {".snippet", "application/xml"},
         {".snp", "application/octet-stream"},
         {".sol", "text/plain"},
         {".sor", "text/plain"},
         {".spc", "application/x-pkcs7-certificates"},
         {".spl", "application/futuresplash"},
         {".src", "application/x-wais-source"},
         {".srf", "text/plain"},
         {".SSISDeploymentManifest", "text/xml"},
         {".ssm", "application/streamingmedia"},
         {".sst", "application/vnd.ms-pki.certstore"},
         {".stl", "application/vnd.ms-pki.stl"},
         {".sv4cpio", "application/x-sv4cpio"},
         {".sv4crc", "application/x-sv4crc"},
         {".svc", "application/xml"},
         {".swf", "application/x-shockwave-flash"},
         {".t", "application/x-troff"},
         {".tar", "application/x-tar"},
         {".tcl", "application/x-tcl"},
         {".testrunconfig", "application/xml"},
         {".testsettings", "application/xml"},
         {".tex", "application/x-tex"},
         {".texi", "application/x-texinfo"},
         {".texinfo", "application/x-texinfo"},
         {".tgz", "application/x-compressed"},
         {".thmx", "application/vnd.ms-officetheme"},
         {".thn", "application/octet-stream"},
         {".tif", "image/tiff"},
         {".tiff", "image/tiff"},
         {".tlh", "text/plain"},
         {".tli", "text/plain"},
         {".toc", "application/octet-stream"},
         {".tr", "application/x-troff"},
         {".trm", "application/x-msterminal"},
         {".trx", "application/xml"},
         {".ts", "video/vnd.dlna.mpeg-tts"},
         {".tsv", "text/tab-separated-values"},
         {".ttf", "application/octet-stream"},
         {".tts", "video/vnd.dlna.mpeg-tts"},
         {".txt", "text/plain"},
         {".u32", "application/octet-stream"},
         {".uls", "text/iuls"},
         {".user", "text/plain"},
         {".ustar", "application/x-ustar"},
         {".vb", "text/plain"},
         {".vbdproj", "text/plain"},
         {".vbk", "video/mpeg"},
         {".vbproj", "text/plain"},
         {".vbs", "text/vbscript"},
         {".vcf", "text/x-vcard"},
         {".vcproj", "Application/xml"},
         {".vcs", "text/plain"},
         {".vcxproj", "Application/xml"},
         {".vddproj", "text/plain"},
         {".vdp", "text/plain"},
         {".vdproj", "text/plain"},
         {".vdx", "application/vnd.ms-visio.viewer"},
         {".vml", "text/xml"},
         {".vscontent", "application/xml"},
         {".vsct", "text/xml"},
         {".vsd", "application/vnd.visio"},
         {".vsi", "application/ms-vsi"},
         {".vsix", "application/vsix"},
         {".vsixlangpack", "text/xml"},
         {".vsixmanifest", "text/xml"},
         {".vsmdi", "application/xml"},
         {".vspscc", "text/plain"},
         {".vss", "application/vnd.visio"},
         {".vsscc", "text/plain"},
         {".vssettings", "text/xml"},
         {".vssscc", "text/plain"},
         {".vst", "application/vnd.visio"},
         {".vstemplate", "text/xml"},
         {".vsto", "application/x-ms-vsto"},
         {".vsw", "application/vnd.visio"},
         {".vsx", "application/vnd.visio"},
         {".vtx", "application/vnd.visio"},
         {".wav", "audio/wav"},
         {".wave", "audio/wav"},
         {".wax", "audio/x-ms-wax"},
         {".wbk", "application/msword"},
         {".wbmp", "image/vnd.wap.wbmp"},
         {".wcm", "application/vnd.ms-works"},
         {".wdb", "application/vnd.ms-works"},
         {".wdp", "image/vnd.ms-photo"},
         {".webarchive", "application/x-safari-webarchive"},
         {".webtest", "application/xml"},
         {".wiq", "application/xml"},
         {".wiz", "application/msword"},
         {".wks", "application/vnd.ms-works"},
         {".WLMP", "application/wlmoviemaker"},
         {".wlpginstall", "application/x-wlpg-detect"},
         {".wlpginstall3", "application/x-wlpg3-detect"},
         {".wm", "video/x-ms-wm"},
         {".wma", "audio/x-ms-wma"},
         {".wmd", "application/x-ms-wmd"},
         {".wmf", "application/x-msmetafile"},
         {".wml", "text/vnd.wap.wml"},
         {".wmlc", "application/vnd.wap.wmlc"},
         {".wmls", "text/vnd.wap.wmlscript"},
         {".wmlsc", "application/vnd.wap.wmlscriptc"},
         {".wmp", "video/x-ms-wmp"},
         {".wmv", "video/x-ms-wmv"},
         {".wmx", "video/x-ms-wmx"},
         {".wmz", "application/x-ms-wmz"},
         {".wpl", "application/vnd.ms-wpl"},
         {".wps", "application/vnd.ms-works"},
         {".wri", "application/x-mswrite"},
         {".wrl", "x-world/x-vrml"},
         {".wrz", "x-world/x-vrml"},
         {".wsc", "text/scriptlet"},
         {".wsdl", "text/xml"},
         {".wvx", "video/x-ms-wvx"},
         {".x", "application/directx"},
         {".xaf", "x-world/x-vrml"},
         {".xaml", "application/xaml+xml"},
         {".xap", "application/x-silverlight-app"},
         {".xbap", "application/x-ms-xbap"},
         {".xbm", "image/x-xbitmap"},
         {".xdr", "text/plain"},
         {".xht", "application/xhtml+xml"},
         {".xhtml", "application/xhtml+xml"},
         {".xla", "application/vnd.ms-excel"},
         {".xlam", "application/vnd.ms-excel.addin.macroEnabled.12"},
         {".xlc", "application/vnd.ms-excel"},
         {".xld", "application/vnd.ms-excel"},
         {".xlk", "application/vnd.ms-excel"},
         {".xll", "application/vnd.ms-excel"},
         {".xlm", "application/vnd.ms-excel"},
         {".xls", "application/vnd.ms-excel"},
         {".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"},
         {".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"},
         {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
         {".xlt", "application/vnd.ms-excel"},
         {".xltm", "application/vnd.ms-excel.template.macroEnabled.12"},
         {".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"},
         {".xlw", "application/vnd.ms-excel"},
         {".xml", "text/xml"},
         {".xmta", "application/xml"},
         {".xof", "x-world/x-vrml"},
         {".XOML", "text/plain"},
         {".xpm", "image/x-xpixmap"},
         {".xps", "application/vnd.ms-xpsdocument"},
         {".xrm-ms", "text/xml"},
         {".xsc", "application/xml"},
         {".xsd", "text/xml"},
         {".xsf", "text/xml"},
         {".xsl", "text/xml"},
         {".xslt", "text/xml"},
         {".xsn", "application/octet-stream"},
         {".xss", "application/xml"},
         {".xtp", "application/octet-stream"},
         {".xwd", "image/x-xwindowdump"},
         {".z", "application/x-compress"},
         {".zip", "application/x-zip-compressed"},
         #endregion
        };

        public static string GetMimeType(string extension)
        {
            if (extension == null)
            {
                throw new ArgumentNullException(nameof(extension));
            }

            if (!extension.StartsWith('.'))
            {
                extension = "." + extension;
            }

            string mime;

            return _mappings.TryGetValue(extension, out mime) ? mime : "application/octet-stream";
        }
    }
}
